#include <iostream>
#include <tuple>
#include <bitset>
template <std::size_t I = 0, typename Tuple>
typename std::enable_if<I == std::tuple_size<Tuple>::value>::type printtp(Tuple)
{
    // 终止递归函数
}
template <std::size_t I = 0, typename Tuple>
    typename std::enable_if < I<std::tuple_size<Tuple>::value>::type printtp(Tuple t)
{
    std::cout << std::get<I>(t) << std::endl;
    printtp<I + 1>(t);
}
void print()
{
    // 终止递归函数
}
/*---------------------以上分别是两个版本的递归终止条件------------------------*/

template <typename... Args>
void print(Args... args) // 重载版本一
{
    printtp(std::make_tuple(args...));
}

template <typename T, typename... Types>
void print(T firstArg, Types... args) // 重载版本二
{
    std::cout << firstArg << std::endl; // print first argument
    print(args...);                     // call print() for remaining arguments
}

int main()
{
    print(1, 2.0, "anything", 'a', std::bitset<16>(2));
}